package com.xd.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @Description: MD5加密工具类
 * @Author: Athy
 * @QQ群: 567177147
 */
public class MD5Util {

    /**
     * @Description: MD5加密
     * @Auther: ONESTAR
     * @Date: 17:19 2022/12/23
     * @Param: 要加密的字符串
     * @Return: 加密后的字符串
     */
    public static String MD5(String str) {
        try {
            if (null == str) return null;
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes());
            byte[] byteDigest = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < byteDigest.length; offset++) {
                i = byteDigest[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            //32位加密小写
            return buf.toString();
            // 16位的加密
            //return buf.toString().substring(8, 24);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }


    public static String MD5a32(String str) {
        return MD5(str);
    }
    public static String MD5A32(String str) {
        return MD5(str).toUpperCase();
    }
    public static String MD5a16(String str) {
        return MD5(str).substring(8, 24);
    }
    public static String MD5A16(String str) {
        return MD5a16(str).toUpperCase();
    }


    public static String MD5a32Toa16(String str) {//32位-->16位
        return str.substring(8, 24);
    }
    public static String MD5a16Toa32(String str) {//16位-->32位
        StringBuilder md5Hash32 = new StringBuilder();

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);

            // 在每个字符前添加零
            md5Hash32.append("0").append(c);
        }

        return md5Hash32.toString();
    }
}
